package org.example.new_hbps_backend_reconstruction.service.impl;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.AllArgsConstructor;
import org.example.new_hbps_backend_reconstruction.common.results.R;
import org.example.new_hbps_backend_reconstruction.entity.SysRole;
import org.example.new_hbps_backend_reconstruction.mapper.SysRoleMapper;
import org.example.new_hbps_backend_reconstruction.service.SysRoleService;
import org.example.new_hbps_backend_reconstruction.utils.MsgUtils;
import org.example.new_hbps_backend_reconstruction.vo.RoleExcelVO;
import org.example.new_hbps_backend_reconstruction.vo.RoleVO;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.BindingResult;

import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * @author 丁利军
 * @date 2025年10月10日 16:54
 * @description TODO: 描述
 */

@Service
@AllArgsConstructor
public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> implements SysRoleService {

//    private SysRoleMenuService roleMenuService;
//
//    /**
//     * 通过用户ID，查询角色信息
//     * @param userId
//     * @return
//     */
//    @Override
//    public List findRolesByUserId(Long userId) {
//        return baseMapper.listRolesByUserId(userId);
//    }
//
//    /**
//     * 根据角色ID 查询角色列表，注意缓存删除
//     * @param roleIdList 角色ID列表
//     * @param key 缓存key
//     * @return
//     */
//    @Override
//    @Cacheable(value = CacheConstants.ROLE_DETAILS, key = "#key", unless = "#result.isEmpty()")
//    public List<SysRole> findRolesByRoleIds(List<Long> roleIdList, String key) {
//        return baseMapper.selectBatchIds(roleIdList);
//    }
//
//    /**
//     * 通过角色ID，删除角色,并清空角色菜单缓存
//     * @param ids
//     * @return
//     */
//    @Override
//    @Transactional(rollbackFor = Exception.class)
//    public Boolean removeRoleByIds(Long[] ids) {
//        roleMenuService
//                .remove(Wrappers.<SysRoleMenu>update().lambda().in(SysRoleMenu::getRoleId, CollUtil.toList(ids)));
//        return this.removeBatchByIds(CollUtil.toList(ids));
//    }
//
//    /**
//     * 根据角色菜单列表
//     * @param roleVo 角色&菜单列表
//     * @return
//     */
//    @Override
//    public Boolean updateRoleMenus(RoleVO roleVo) {
//        return roleMenuService.saveRoleMenus(roleVo.getRoleId(), roleVo.getMenuIds());
//    }
//
//    /**
//     * 导入角色
//     * @param excelVOList 角色列表
//     * @param bindingResult 错误信息列表
//     * @return ok fail
//     */
//    @Override
//    public R importRole(List<RoleExcelVO> excelVOList, BindingResult bindingResult) {
//        // 通用校验获取失败的数据
//        List<ErrorMessage> errorMessageList = (List<ErrorMessage>) bindingResult.getTarget();
//
//        // 个性化校验逻辑
//        List<SysRole> roleList = this.list();
//
//        // 执行数据插入操作 组装 RoleDto
//        for (RoleExcelVO excel : excelVOList) {
//            Set<String> errorMsg = new HashSet<>();
//            // 检验角色名称或者角色编码是否存在
//            boolean existRole = roleList.stream()
//                    .anyMatch(sysRole -> excel.getRoleName().equals(sysRole.getRoleName())
//                            || excel.getRoleCode().equals(sysRole.getRoleCode()));
//
//            if (existRole) {
//                errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_ROLE_NAMEORCODE_EXISTING, excel.getRoleName(),
//                        excel.getRoleCode()));
//            }
//
//            // 数据合法情况
//            if (CollUtil.isEmpty(errorMsg)) {
//                insertExcelRole(excel);
//            }
//            else {
//                // 数据不合法情况
//                errorMessageList.add(new ErrorMessage(excel.getLineNum(), errorMsg));
//            }
//        }
//        if (CollUtil.isNotEmpty(errorMessageList)) {
//            return R.failed(errorMessageList);
//        }
//        return R.ok();
//    }
//
//    /**
//     * 查询全部的角色
//     * @return list
//     */
//    @Override
//    public List<RoleExcelVO> listRole() {
//        List<SysRole> roleList = this.list(Wrappers.emptyWrapper());
//        // 转换成execl 对象输出
//        return roleList.stream().map(role -> {
//            RoleExcelVO roleExcelVO = new RoleExcelVO();
//            BeanUtil.copyProperties(role, roleExcelVO);
//            return roleExcelVO;
//        }).collect(Collectors.toList());
//    }
//
//    /**
//     * 插入excel Role
//     */
//    private void insertExcelRole(RoleExcelVO excel) {
//        SysRole sysRole = new SysRole();
//        sysRole.setRoleName(excel.getRoleName());
//        sysRole.setRoleDesc(excel.getRoleDesc());
//        sysRole.setRoleCode(excel.getRoleCode());
//        this.save(sysRole);
//    }

}
